/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is Forte for Java, Community Edition. The Initial * Developer of the Original Code is Sun Microsystems, Inc. Portions * Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved. */ package org.netbeans.modules.javadoc.search; import java.io.*; import java.net.URL; import java.util.ArrayList; import java.util.ResourceBundle; import javax.swing.DefaultListModel; import javax.swing.SwingUtilities; import java.awt.Image; import java.awt.Dimension; import java.awt.Rectangle; import javax.swing.Icon; import javax.swing.ImageIcon; import org.openide.awt.HtmlBrowser; import org.openide.awt.SplittedPanel; import org.openide.windows.TopComponent; import org.openide.windows.Mode; import org.openide.windows.Workspace; import org.openide.util.RequestProcessor; import org.openide.TopManager; import org.openide.NotifyDescriptor; import org.openide.util.NbBundle; import org.openide.src.Element; import org.openide.cookies.OpenCookie; import org.openide.util.HelpCtx; import org.netbeans.modules.javadoc.settings.DocumentationSettings; /** Main window for documentation index search * * @author Petr Hrebejk */ public class IndexSearch extends TopComponent implements Externalizable { //static final long serialVersionUID =3206093459760846163L; private static final java.awt.Dimension PREFFERED_SIZE = new java.awt.Dimension( 580, 430 ); static final long serialVersionUID =1200348578933093459L; /** The only instance allowed in system */ private static IndexSearch indexSearch; /** Search engine */ private SearchEngine searchEngine = null; /** The state of the window is stored in hidden options of DocumentationSettings */ DocumentationSettings ds = new DocumentationSettings(); private String quickFind; /* Button icons */ //private static final ImageIcon windowIcon = new ImageIcon (IndexSearch.class.getResource ("/org/netbeans/modules/javadoc/resources/searchDoc.gif")); // NOI18N private static final ImageIcon refSortIcon = new ImageIcon (IndexSearch.class.getResource ("/org/netbeans/modules/javadoc/resources/refSort.gif")); // NOI18N private static final ImageIcon typeSortIcon = new ImageIcon (IndexSearch.class.getResource ("/org/netbeans/modules/javadoc/resources/typeSort.gif")); // NOI18N private static final ImageIcon alphaSortIcon = new ImageIcon (IndexSearch.class.getResource ("/org/netbeans/modules/javadoc/resources/alphaSort.gif")); // NOI18N private static final ImageIcon listOnlyIcon = new ImageIcon (IndexSearch.class.getResource ("/org/netbeans/modules/javadoc/resources/list_only.gif")); // NOI18N private static final ImageIcon listHtmlIcon = new ImageIcon (IndexSearch.class.getResource ("/org/netbeans/modules/javadoc/resources/list_html.gif")); // NOI18N private static final ImageIcon showSourceIcon = new ImageIcon (IndexSearch.class.getResource ("/org/netbeans/modules/javadoc/resources/showSource.gif")); // NOI18N private final static String ICON_RESOURCE = "/org/netbeans/modules/javadoc/resources/searchDoc.gif"; // NOI18N private final static java.awt.Image windowIcon = java.awt.Toolkit.getDefaultToolkit ().getImage ( IndexSearch.class.getResource (ICON_RESOURCE)); /* Current sort mode */ private String currentSort = "A"; // NOI18N /* Hand made components */ private javax.swing.JScrollPane resultsScrollPane; private javax.swing.JList resultsList; private HtmlBrowser.BrowserComponent quickBrowser; private org.openide.awt.SplittedPanel splitPanel; private static ResourceBundle bundle = NbBundle.getBundle(IndexSearch.class); /** Button titles */ private static final String STR_FIND = bundle.getString ("CTL_SEARCH_ButtonFind"); private static final String STR_STOP = bundle.getString ("CTL_SEARCH_ButtonStop"); /** List models for different sorts * @associates DocIndexItem*/ private ArrayList results = new ArrayList(); private DefaultListModel referenceModel = null; private DefaultListModel typeModel = null; private DefaultListModel alphaModel = null; /* Holds split position if the quick view is disabled */ private int oldSplit = 50; private static final DefaultListModel waitModel = new DefaultListModel(); private static final DefaultListModel notModel = new DefaultListModel(); static { DocIndexItem dii = new DocIndexItem( bundle.getString("CTL_SEARCH_Wait" ), "", null, "" ); dii.setIconIndex( DocSearchIcons.ICON_WAIT ); waitModel.addElement( dii ); DocIndexItem diin = new DocIndexItem( bundle.getString("CTL_SEARCH_NotFound" ), "", null, "" ); diin.setIconIndex( DocSearchIcons.ICON_NOT_FOUND ); notModel.addElement( diin ); } /** Initializes the Form */ public IndexSearch() { initComponents (); javax.swing.ComboBoxEditor editor = searchComboBox.getEditor(); editor.addActionListener (new java.awt.event.ActionListener () { public void actionPerformed (java.awt.event.ActionEvent evt) { if ( searchEngine == null ) searchButtonActionPerformed( evt ); } } ); // Split panel splitPanel = new org.openide.awt.SplittedPanel (); //splitPanel.setLayout (new java.awt.FlowLayout ()); splitPanel.setSplitType( org.openide.awt.SplittedPanel.HORIZONTAL ); splitPanel.setSplitAbsolute( false ); splitPanel.setSplitPosition( oldSplit = 50 ); splitPanel.setSplitDragable( true ); splitPanel.setSplitTypeChangeEnabled( true ); splitPanel.addSplitChangeListener( new SplittedPanel.SplitChangeListener() { public void splitChanged (SplittedPanel.SplitChangeEvent evt) { int value = evt.getNewValue(); ds.setIdxSearchSplit( value ); if ( value == 100 ) { quickViewButton.setSelected( false ); ds.setIdxSearchNoHtml( true ); } else { quickViewButton.setSelected( true ); ds.setIdxSearchNoHtml( false ); } } } ); java.awt.GridBagConstraints gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridwidth = 0; gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints1.insets = new java.awt.Insets (5, 0, 0, 0); gridBagConstraints1.weightx = 1.0; gridBagConstraints1.weighty = 1.0; add (splitPanel, gridBagConstraints1); // Results - SrollPane & JList resultsScrollPane = new javax.swing.JScrollPane (); resultsList = new javax.swing.JList (); resultsList.setSelectionMode (javax.swing.ListSelectionModel.SINGLE_SELECTION ); resultsList.addKeyListener (new java.awt.event.KeyAdapter () { public void keyPressed (java.awt.event.KeyEvent evt) { resultsListKeyPressed (evt); } } ); resultsList.addMouseListener (new java.awt.event.MouseAdapter () { public void mouseClicked (java.awt.event.MouseEvent evt) { resultsListMouseClicked (evt); } } ); resultsScrollPane.setViewportView (resultsList); splitPanel.add( resultsScrollPane, org.openide.awt.SplittedPanel.ADD_FIRST ); // Quick browser component quickBrowser = new HtmlBrowser.BrowserComponent( true, false ); quickBrowser.setEnableLocation( false ); quickBrowser.setEnableHome( false ); splitPanel.add( quickBrowser, org.openide.awt.SplittedPanel.ADD_SECOND ); DefaultListModel listModel = new DefaultListModel(); // PENDING: Change to SortedArrayList resultsList.setModel( listModel ); IndexListCellRenderer cr = new IndexListCellRenderer(); resultsList.setCellRenderer( cr ); resultsList.getSelectionModel().addListSelectionListener( new javax.swing.event.ListSelectionListener() { public void valueChanged( javax.swing.event.ListSelectionEvent evt ) { showHelp( true ); } }); resultsScrollPane.validate(); searchButton.setText( STR_FIND ); sourceButton.setIcon( showSourceIcon ); byReferenceButton.setIcon( refSortIcon ); byTypeButton.setIcon( typeSortIcon ); byNameButton.setIcon( alphaSortIcon ); quickViewButton.setIcon( listHtmlIcon ); quickViewButton.setSelectedIcon( listOnlyIcon ); javax.swing.ButtonGroup bg = new javax.swing.ButtonGroup(); bg.add( byReferenceButton ); bg.add( byTypeButton ); bg.add( byNameButton ); // Adding ToolTips searchButton.setToolTipText(bundle.getString( "CTL_SEARCH_search_ToolTip" )); byReferenceButton.setToolTipText(bundle.getString( "CTL_SEARCH_byReference_ToolTip" )); byTypeButton.setToolTipText(bundle.getString( "CTL_SEARCH_byType_ToolTip" )); byNameButton.setToolTipText(bundle.getString( "CTL_SEARCH_byName_ToolTip" )); quickViewButton.setToolTipText(bundle.getString( "CTL_SEARCH_quickView_ToolTip" )); sourceButton.setToolTipText(bundle.getString( "CTL_SEARCH_showSource_ToolTip" )); } public HelpCtx getHelpCtx () { return new HelpCtx (IndexSearch.class); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the FormEditor. */ private void initComponents () {//GEN-BEGIN:initComponents jPanel1 = new javax.swing.JPanel (); searchComboBox = new javax.swing.JComboBox (); searchButton = new javax.swing.JButton (); sourceButton = new javax.swing.JButton (); byNameButton = new javax.swing.JToggleButton (); byReferenceButton = new javax.swing.JToggleButton (); byTypeButton = new javax.swing.JToggleButton (); quickViewButton = new javax.swing.JToggleButton (); setLayout (new java.awt.GridBagLayout ()); java.awt.GridBagConstraints gridBagConstraints1; setBorder (new javax.swing.border.EmptyBorder(new java.awt.Insets(8, 8, 8, 8))); jPanel1.setLayout (new java.awt.GridBagLayout ()); java.awt.GridBagConstraints gridBagConstraints2; searchComboBox.setEditable (true); searchComboBox.addActionListener (new java.awt.event.ActionListener () { public void actionPerformed (java.awt.event.ActionEvent evt) { searchComboBoxActionPerformed (evt); } } ); gridBagConstraints2 = new java.awt.GridBagConstraints (); gridBagConstraints2.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints2.insets = new java.awt.Insets (0, 0, 0, 8); gridBagConstraints2.anchor = java.awt.GridBagConstraints.NORTH; gridBagConstraints2.weightx = 1.0; jPanel1.add (searchComboBox, gridBagConstraints2); searchButton.setText (org.openide.util.NbBundle.getBundle(IndexSearch.class).getString("IndexSearch.searchButton.text")); searchButton.addActionListener (new java.awt.event.ActionListener () { public void actionPerformed (java.awt.event.ActionEvent evt) { searchButtonActionPerformed (evt); } } ); gridBagConstraints2 = new java.awt.GridBagConstraints (); gridBagConstraints2.insets = new java.awt.Insets (0, 0, 0, 3); gridBagConstraints2.anchor = java.awt.GridBagConstraints.WEST; jPanel1.add (searchButton, gridBagConstraints2); sourceButton.setPreferredSize (new java.awt.Dimension(25, 25)); sourceButton.setMinimumSize (new java.awt.Dimension(25, 25)); sourceButton.addActionListener (new java.awt.event.ActionListener () { public void actionPerformed (java.awt.event.ActionEvent evt) { showSource (evt); } } ); gridBagConstraints2 = new java.awt.GridBagConstraints (); gridBagConstraints2.insets = new java.awt.Insets (0, 0, 0, 3); jPanel1.add (sourceButton, gridBagConstraints2); byNameButton.setPreferredSize (new java.awt.Dimension(25, 25)); byNameButton.setSelected (true); byNameButton.setMinimumSize (new java.awt.Dimension(25, 25)); byNameButton.setActionCommand ("A"); // NOI18N byNameButton.setRequestFocusEnabled (false); byNameButton.addActionListener (new java.awt.event.ActionListener () { public void actionPerformed (java.awt.event.ActionEvent evt) { sortButtonActionPerformed (evt); } } ); gridBagConstraints2 = new java.awt.GridBagConstraints (); jPanel1.add (byNameButton, gridBagConstraints2); byReferenceButton.setPreferredSize (new java.awt.Dimension(25, 25)); byReferenceButton.setMinimumSize (new java.awt.Dimension(25, 25)); byReferenceButton.setActionCommand ("R"); // NOI18N byReferenceButton.setRequestFocusEnabled (false); byReferenceButton.addActionListener (new java.awt.event.ActionListener () { public void actionPerformed (java.awt.event.ActionEvent evt) { sortButtonActionPerformed (evt); } } ); gridBagConstraints2 = new java.awt.GridBagConstraints (); jPanel1.add (byReferenceButton, gridBagConstraints2); byTypeButton.setPreferredSize (new java.awt.Dimension(25, 25)); byTypeButton.setMinimumSize (new java.awt.Dimension(25, 25)); byTypeButton.setActionCommand ("T"); // NOI18N byTypeButton.setRequestFocusEnabled (false); byTypeButton.addActionListener (new java.awt.event.ActionListener () { public void actionPerformed (java.awt.event.ActionEvent evt) { sortButtonActionPerformed (evt); } } ); gridBagConstraints2 = new java.awt.GridBagConstraints (); jPanel1.add (byTypeButton, gridBagConstraints2); quickViewButton.setSelected (true); quickViewButton.setRequestFocusEnabled (false); quickViewButton.addActionListener (new java.awt.event.ActionListener () { public void actionPerformed (java.awt.event.ActionEvent evt) { quickViewButtonActionPerformed (evt); } } ); gridBagConstraints2 = new java.awt.GridBagConstraints (); gridBagConstraints2.gridwidth = 0; gridBagConstraints2.insets = new java.awt.Insets (0, 5, 0, 0); jPanel1.add (quickViewButton, gridBagConstraints2); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridwidth = 0; gridBagConstraints1.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints1.weightx = 1.0; add (jPanel1, gridBagConstraints1); }//GEN-END:initComponents private void showSource (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showSource showSource(); }//GEN-LAST:event_showSource private void sortButtonActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_sortButtonActionPerformed currentSort = evt.getActionCommand(); ds.setIdxSearchSort( currentSort ); sortResults(); }//GEN-LAST:event_sortButtonActionPerformed private void quickViewButtonActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_quickViewButtonActionPerformed if ( quickViewButton.isSelected() ) { splitPanel.setSplitPosition( oldSplit == 100 ? 50 : oldSplit ); ds.setIdxSearchSplit( oldSplit == 100 ? 50 : oldSplit ); ds.setIdxSearchNoHtml( false ); showHelp( true ); } else { oldSplit = splitPanel.getSplitPosition(); splitPanel.setSplitPosition( 100 ); ds.setIdxSearchSplit( 100 ); ds.setIdxSearchNoHtml( true ); } }//GEN-LAST:event_quickViewButtonActionPerformed private void resultsListKeyPressed (java.awt.event.KeyEvent evt) {//GEN-FIRST:event_resultsListKeyPressed // Add your handling code here: if ( evt.getKeyCode() == java.awt.event.KeyEvent.VK_ENTER || evt.getKeyCode() == java.awt.event.KeyEvent.VK_SPACE ) { /* if ( evt.isShiftDown() ) { showSource(); evt.consume(); } else */ showHelp(); } }//GEN-LAST:event_resultsListKeyPressed private void resultsListMouseClicked (java.awt.event.MouseEvent evt) {//GEN-FIRST:event_resultsListMouseClicked // Add your handling code here: if ( evt.getClickCount() == 2 ) { if ( evt.isShiftDown() ) { showSource(); evt.consume(); } else showHelp(); } }//GEN-LAST:event_resultsListMouseClicked private void showHelp( ) { showHelp( false ); } /** Invokes the browser with help */ private void showHelp( boolean quick ) { if (quick && splitPanel.getSplitPosition() == 100 ) return; if ( resultsList.getMinSelectionIndex() < 0 ) return; DocIndexItem dii = (DocIndexItem)resultsList.getModel().getElementAt( resultsList.getMinSelectionIndex() ); try { URL url = dii.getURL(); if ( url == null ) return; // Workaround for bug in FileSystems String strUrl = url.toString(); if ( strUrl.startsWith( "nbfs:" ) && strUrl.charAt( 5 ) != '/' ){ // NOI18N url = new URL( "nbfs:/" + strUrl.substring( 5 ) ); // NOI18N } if ( quick ) quickBrowser.setURL( url ); else TopManager.getDefault().showUrl( url ); } catch ( java.net.MalformedURLException ex ) { // Do nothing if the URL isn't O.K. } } /** Tryies to find source code for the selected item in repository. If the * is foun opens the source */ private void showSource( ) { if ( resultsList.getMinSelectionIndex() < 0 ) { return; } DocIndexItem dii = (DocIndexItem)resultsList.getModel().getElementAt( resultsList.getMinSelectionIndex() ); try { Element e = SrcFinder.findSource( dii.getPackage(), dii.getURL() ); if ( e != null ) { OpenCookie oc = (OpenCookie)e.getCookie( OpenCookie.class ); if ( oc != null ) { System.out.println( oc ); oc.open(); } else { NotifyDescriptor.Message nd = new NotifyDescriptor.Message( bundle.getString( "MSG_SEARCH_SrcNotFound" ) ); TopManager.getDefault().notify( nd ); } } else { NotifyDescriptor.Message nd = new NotifyDescriptor.Message( bundle.getString( "MSG_SEARCH_SrcNotFound" ) ); TopManager.getDefault().notify( nd ); } } catch ( java.net.MalformedURLException e ) { System.out.println( e ); } } private void searchComboBoxActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_searchComboBoxActionPerformed /*if ( searchEngine == null ) searchButtonActionPerformed( evt );*/ }//GEN-LAST:event_searchComboBoxActionPerformed private void searchButtonActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_searchButtonActionPerformed if ( searchEngine == null ) { if ( searchComboBox.getEditor().getItem().toString() != null && searchComboBox.getEditor().getItem().toString().length() > 0 ) { searchEngine = new SearchEngine(); searchEngine.go(); } } else { searchEngine.stop(); searchEngine = null; } }//GEN-LAST:event_searchButtonActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JPanel jPanel1; private javax.swing.JComboBox searchComboBox; private javax.swing.JButton searchButton; private javax.swing.JButton sourceButton; private javax.swing.JToggleButton byNameButton; private javax.swing.JToggleButton byReferenceButton; private javax.swing.JToggleButton byTypeButton; private javax.swing.JToggleButton quickViewButton; // End of variables declaration//GEN-END:variables private void searchStoped() { searchEngine = null; javax.swing.SwingUtilities.invokeLater( new Runnable() { public void run() { searchButton.setText( STR_FIND ); if ( resultsList.getModel().getSize() > 0 ) { resultsList.setSelectedIndex( 0 ); resultsList.grabFocus(); } referenceModel = typeModel = alphaModel = null; sortResults(); } } ); } void setTextToFind( String toFind ) { quickFind = toFind; /* if ( toFind != null ) { quickFind = toFind; } */ } public void open() { super.open(); if ( quickFind != null ) { searchComboBox.getEditor().setItem( quickFind ); if ( searchEngine == null ) { searchButtonActionPerformed( null ); } } quickFind = null; } java.awt.Dimension getPrefferedSize() { return PREFFERED_SIZE; } public static IndexSearch getDefault() { if ( indexSearch == null ) { indexSearch = new IndexSearch (); Workspace workspace = TopManager.getDefault().getWindowManager().getCurrentWorkspace(); /* Mode myMode = workspace.createMode( "JavaDocSearch", //NOI8N // NOI18N org.openide.util.NbBundle.getBundle(IndexSearch.class).getString("IndexSearch.workspace.name"), IndexSearch.class.getResource (ICON_RESOURCE)); myMode.setBounds(new Rectangle( 200, 200, 600, 400 ) ); myMode.dockInto( indexSearch ); */ indexSearch.setName( bundle.getString ("CTL_SEARCH_WindowTitle") ); indexSearch.setIcon( windowIcon ); } return indexSearch; } public void resolveButtonState() { final String sort = ds.getIdxSearchSort(); final boolean noHtml = ds.isIdxSearchNoHtml(); final int split = ds.getIdxSearchSplit(); currentSort = sort; javax.swing.SwingUtilities.invokeLater( new Runnable() { public void run() { byNameButton.setSelected( sort.equals( "A" ) ); // NOI18N byReferenceButton.setSelected( sort.equals( "R" ) ); // NOI18N byTypeButton.setSelected( sort.equals( "T" ) ); // NOI18N quickViewButton.setSelected( !noHtml ); splitPanel.setSplitPosition( split ); } } ); } public void readExternal(final ObjectInput in ) throws java.io.IOException, java.lang.ClassNotFoundException { super.readExternal( in ); indexSearch = this; resolveButtonState(); } public void writeExternal(final ObjectOutput out) throws java.io.IOException { super.writeExternal( out ); } private class SearchEngine { /** * @associates IndexSearchThread */ private ArrayList tasks; private DocFileSystem[] docSystems; private IndexSearchThread.DocIndexItemConsumer diiConsumer; SearchEngine() { docSystems = DocFileSystem.getFolders(); tasks = new ArrayList( docSystems.length ); diiConsumer = new IndexSearchThread.DocIndexItemConsumer() { public void addDocIndexItem( final DocIndexItem dii ) { results.add( dii ); /* javax.swing.SwingUtilities.invokeLater( new Runnable() { public void run() { ((DefaultListModel)resultsList.getModel()).addElement( dii ); } } ) ;*/ } public void indexSearchThreadFinished( IndexSearchThread t ) { tasks.remove( t ); if ( tasks.isEmpty() ) searchStoped(); } }; } /** Starts searching */ void go() { if ( docSystems.length <= 0 ) { TopManager.getDefault().notify( new NotifyDescriptor.Message( bundle.getString( "MSG_NoDoc" ) ) ); searchStoped(); return; } String toFind = new String( searchComboBox.getEditor().getItem().toString() ); // Alocate array for results results = new ArrayList(); //Clear all models referenceModel = null; typeModel = null; alphaModel = null; // Try to find this string in Combo for ( int i = 0; i < searchComboBox.getItemCount(); i++ ) { if ( searchComboBox.getItemAt( i ).toString().equals( toFind ) || i >= 10 ) { searchComboBox.removeItemAt( i ); } } searchComboBox.insertItemAt( toFind, 0 ); searchComboBox.getEditor().setItem( toFind ); resultsList.setModel( waitModel ); //((DefaultListModel)resultsList.getModel()).clear(); for( int i = 0; i < docSystems.length; i++ ) { IndexSearchThread searchThread = new SearchThreadJdk12( toFind, docSystems[i].getIndexFile() , diiConsumer ); tasks.add( searchThread ); searchThread.go(); } searchButton.setText( STR_STOP ); } /** Stops the search */ void stop() { for( int i = 0; i < tasks.size(); i++ ) { SearchThreadJdk12 searchThread = (SearchThreadJdk12)tasks.get( i ); searchThread.finish(); } } } DefaultListModel generateModel( java.util.Comparator comp ) { DefaultListModel model = new DefaultListModel(); java.util.Collections.sort( results, comp ); java.util.Iterator it = results.iterator(); String pckg = null; while ( it.hasNext() ) { DocIndexItem dii = (DocIndexItem)it.next(); if ( comp == DocIndexItem.REFERENCE_COMPARATOR && !dii.getPackage().equals( pckg ) && dii.getIconIndex() != DocSearchIcons.ICON_PACKAGE ) { // try { DocIndexItem ndii = new DocIndexItem( "PACKAGE ", dii.getPackage(), null, "" ); // NOI18N ndii.setIconIndex( DocSearchIcons.ICON_PACKAGE ); model.addElement( ndii ); pckg = dii.getPackage(); // } // catch ( java.net.MalformedURLException e ) { //System.out.println( e ); // Do nothing if bad URL // } } model.addElement( dii ); } return model; } void sortResults() { if ( results.size() < 1 ) { resultsList.setModel( notModel ); } else if ( currentSort.equals( "R" ) ) { // NOI18N if ( referenceModel == null ) { resultsList.setModel( waitModel ); resultsList.invalidate(); resultsList.revalidate(); referenceModel = generateModel( DocIndexItem.REFERENCE_COMPARATOR ); } resultsList.setModel( referenceModel ); } else if ( currentSort.equals( "T" ) ) { // NOI18N if ( typeModel == null ) { resultsList.setModel( waitModel ); resultsList.invalidate(); resultsList.revalidate(); typeModel = generateModel( DocIndexItem.TYPE_COMPARATOR ); } resultsList.setModel( typeModel ); } else if ( currentSort.equals( "A" ) ) { // NOI18N if ( alphaModel == null ) { resultsList.setModel( waitModel ); resultsList.invalidate(); resultsList.revalidate(); alphaModel = generateModel( DocIndexItem.ALPHA_COMPARATOR ); } resultsList.setModel( alphaModel ); } resultsList.invalidate(); resultsList.revalidate(); resultsList.repaint(); } } /* * Log * 27 Gandalf 1.26 1/18/00 Petr Hrebejk Window made bigger * 26 Gandalf 1.25 1/15/00 Petr Hrebejk UI Change * 25 Gandalf 1.24 1/13/00 Petr Hrebejk i18n mk3 * 24 Gandalf 1.23 1/12/00 Petr Hrebejk i18n mk2 * 23 Gandalf 1.22 1/12/00 Petr Hrebejk i18n * 22 Gandalf 1.21 1/11/00 Jesse Glick Context help. * 21 Gandalf 1.20 11/23/99 Petr Hrebejk Show source feature * added * 20 Gandalf 1.19 10/27/99 Petr Hrebejk Bug fixes & back button * in Javadoc Quickview * 19 Gandalf 1.18 10/23/99 Ian Formanek NO SEMANTIC CHANGE - Sun * Microsystems Copyright in File Comment * 18 Gandalf 1.17 10/1/99 Petr Hrebejk Serialization of sort * mode fixed * 17 Gandalf 1.16 8/17/99 Petr Hrebejk IndexSearch window * serialization * 16 Gandalf 1.15 8/13/99 Petr Hrebejk Exception icopn added & * Jdoc repository moved to this package * 15 Gandalf 1.14 7/29/99 David Simonek changes concerning * window system * 14 Gandalf 1.13 7/26/99 Petr Hrebejk AutoComment tool * implemented * 13 Gandalf 1.12 7/12/99 Petr Hrebejk New window system * 12 Gandalf 1.11 6/23/99 Petr Hrebejk HTML doc view & sort * modes added * 11 Gandalf 1.10 6/11/99 Petr Hrebejk * 10 Gandalf 1.9 6/11/99 Petr Hrebejk Better support for * search from editor; Enter for start searching * 9 Gandalf 1.8 6/9/99 Ian Formanek ---- Package Change To * org.openide ---- * 8 Gandalf 1.7 6/4/99 Petr Hrebejk * 7 Gandalf 1.6 5/27/99 Petr Hrebejk Crtl+F1 documentation * search form editor added * 6 Gandalf 1.5 5/16/99 Petr Hrebejk * 5 Gandalf 1.4 5/16/99 Petr Hrebejk * 4 Gandalf 1.3 5/14/99 Petr Hrebejk * 3 Gandalf 1.2 5/14/99 Petr Hrebejk * 2 Gandalf 1.1 5/14/99 Petr Hrebejk * 1 Gandalf 1.0 5/13/99 Petr Hrebejk * $ */